package com.itlong.cloud.POJO.VO;

import com.itlong.cloud.enumerate.ecode.ErrorCode;
import com.itlong.cloud.utils.node.JsonUtil;
import lombok.Getter;
import lombok.Setter;

import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 响应结果格式化
 *
 * @craeteDate 2017--19 16:06
 */
public class MessageVO implements Serializable {

    @Setter
    @Getter
    private Integer msgCode;
    @Setter
    @Getter
    private String msg;
    @Setter
    @Getter
    private Object data;
    @Setter
    @Getter
    private String extend;   //拓展字段，内容为json字符串 当前拓展格式为{"dataId":"xxxxxxxxxxxx"}

    public MessageVO(){
        super();
    }

    /** 自定义错误码响应结果
     * @param errorCode
     * @param errorCode
     */
    public MessageVO(ErrorCode errorCode){
        super();
        this.setMsgCode(errorCode.getErrorValue());
        this.setMsg(errorCode.getCodeMsg());
    }


    /**
     * <desc>
     *      保存操作数据的id
     * </desc>
     *
     * @param dataId
     * @param errorCode
     * @throws IOException
     * @author Jiaqi.X
     * @createDate 2018/09/06
     */
    public MessageVO(String dataId,ErrorCode errorCode,Object data) throws IOException {
        super();
        this.setMsgCode(errorCode.getErrorValue());
        this.setMsg(errorCode.getCodeMsg());
        Map<String,Object> extend = new HashMap<>();
        extend.put("dataId",dataId);
        this.setExtend(JsonUtil.toJSON(extend));
        this.setData(data);
    }

    /**
     * <desc>
     *      保存操作数据的id
     * </desc>
     *
     * @param dataId
     * @param errorCode
     * @throws IOException
     * @author Jiaqi.X
     * @createDate 2018/09/06
     */
    public MessageVO(String dataId,ErrorCode errorCode) throws IOException {
        super();
        this.setMsgCode(errorCode.getErrorValue());
        this.setMsg(errorCode.getCodeMsg());
        Map<String,Object> extend = new HashMap<>();
        extend.put("dataId",dataId);
        this.setExtend(JsonUtil.toJSON(extend));
    }
    /** 自定义错误码响应结果_国际化
     *
     * @param errorCode 错误码
     * @param language 语种
     */
//    public MessageVO( String language,ErrorCode errorCode){
//        super();
//        this.setMsgCode(errorCode.getErrorValue());
//        String msg = getMsg(errorCode,language);
//        this.setMsg(msg);
//    }

    /** 自定义错误码及错误消息的响应结果
     *
     * @param errorCode 错误码
     * @param msg 错误消息
     */
    public MessageVO(ErrorCode errorCode, String msg){
        super();
        this.setMsgCode(errorCode.getErrorValue());
        this.setMsg(msg);
    }

    /** 自定义错误码及数据集的响应结果
     *
     * @param errorCode 错误码
     * @param data 数据集
     */
    public MessageVO(ErrorCode errorCode, Object data){
        super();
        this.setMsgCode(errorCode.getErrorValue());
        this.setMsg(errorCode.getCodeMsg());
        this.setData(data);
    }

    /** 自定义错误码及数据集的响应结果_国际化
     *
     * @param language 语种
     * @param errorCode 错误码
     * @param data 数据集
     */
//    public MessageVO(String language,ErrorCode errorCode, Object data){
//        super();
//        this.setMsgCode(errorCode.getErrorValue());
//        String msg = getMsg(errorCode,language);
//        this.setMsg(msg);
//        this.setData(data);
//    }

    /** 自定义错误码、错误信息及数据集的响应结果
     *
     * @param errorCode 错误码
     * @param msg 错误信息
     * @param data 数据集
     */
    public MessageVO(ErrorCode errorCode, String msg, Object data){
        super();
        this.setMsg(msg);
        this.setMsgCode(errorCode.getErrorValue());
        this.setData(data);
    }
    /*
    private String getMsg(ErrorCode errorCode,String languageType){
        //如果值为空，默认中文
        if(StringUtils.isBlank(languageType)){
            languageType = LanguageTypeEnum.CHINESE.getLanguage();
        }
        String msg="";
        switch (LanguageTypeEnum.getByLanguage(languageType)){
            case CHINESE :
                msg = errorCode.getCodeMsg();
                break;
            case ENGLISH:
                msg = AppErrorCodeEnumEN.getDescriptionEN(errorCode.getSubCode());
                break;

            default:break;
          }

            return msg;
    } */

}
